package com.atguigu.observer;

/**
 * @program: design-patterns
 * @author: yangshen
 * @description: 天气预报的数据类(核心类)
 *  1.包含最新的天气情况信息
 *  2.含有 CurrentConditions 对象（因为要对该网站进行推送）
 *  3.当有数据更新时，就主动调用 CurrentConditions 的 update方法（含有display显示的动作），这样他们（接入方）就看到了最新的信息
 *
 *  缺点：当增加一个新浪网天气网站时，需要修改WeatherData核心类, 1.需要聚合新浪网站；2.dataChange()要推送
 *      也就是说修改了核心类，违反了ocp，不推荐
 * @create: 2022-03-07 23:31
 **/
public class WeatherData {
    /**
     * 温度
     */
    private float temperature;
    /**
     * 气压
     */
    private float pressure;
    /**
     * 适度
     */
    private float humidity;
    //聚合(气象站自己的网站)
    private CurrentConditions currentConditions;
    //聚合新的第三方，比如新浪网站

    public WeatherData(CurrentConditions currentConditions) {
        this.currentConditions = currentConditions;
    }

    public void dataChange(){
        //3.调用接入方的update方法
        currentConditions.update(getTemperature(), getPressure(), getHumidity());
    }

    //1.当数据有更新时，就调用setData()
    public void setData(float temperature, float pressure, float humidity){
        this.temperature = temperature;
        this.pressure = pressure;
        this.humidity = humidity;
        //2.调用dataChange，将最新消息 推送给 接入方 currentConditions
        dataChange();
    }

    public float getTemperature() {
        return temperature;
    }

    public float getPressure() {
        return pressure;
    }

    public float getHumidity() {
        return humidity;
    }
}
